// API 工具类
class AuthAPI {
  constructor() {
    // 基础URL - 需要根据实际部署情况修改
    this.baseURL = 'http://localhost:3000/api/v1/auth';
  }

  // 通用请求方法
  async request(endpoint, options = {}) {
    const url = `${this.baseURL}${endpoint}`;
    
    const defaultOptions = {
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
      },
      credentials: 'include',  // 确保发送认证信息
      mode: 'cors',           // 使用CORS模式
    };
    
    // 如果有token，添加到请求头
    const token = localStorage.getItem('token');
    if (token) {
      defaultOptions.headers['Authorization'] = `Bearer ${token}`;
    }
    
    const config = {
      ...defaultOptions,
      ...options,
      headers: {
        ...defaultOptions.headers,
        ...options.headers,
      },
    };
    
    try {
      const response = await fetch(url, config);
      
      // 401错误处理
      if (response.status === 401) {
        localStorage.removeItem('token');
        throw new Error('未授权访问，请重新登录');
      }
      
      // 其他错误状态处理
      if (!response.ok) {
        let errorData;
        try {
          errorData = await response.json();
        } catch (e) {
          errorData = { message: `请求失败: ${response.status}` };
        }
        throw new Error(errorData.message || `请求失败: ${response.status}`);
      }
      
      // 成功响应处理
      const contentType = response.headers.get('content-type');
      if (contentType && contentType.includes('application/json')) {
        return await response.json();
      }
      return await response.text();
      
    } catch (error) {
      if (error.name === 'TypeError' && error.message === 'Failed to fetch') {
        console.error('网络连接失败，请检查服务器是否正常运行');
        throw new Error('网络连接失败，请检查网络或联系管理员');
      }
      
      console.error('API请求错误:', error.message);
      throw error;
    }
  }

  // 登录
  async login(credentials) {
    return this.request('/login', {
      method: 'POST',
      body: JSON.stringify(credentials),
    });
  }

  // 注册
  async register(userData) {
    return this.request('/register', {
      method: 'POST',
      body: JSON.stringify(userData),
    });
  }

  // 获取当前用户信息
  async getCurrentUser() {
    const token = localStorage.getItem('token');
    if (!token) {
      throw new Error('未找到认证令牌');
    }
    
    return this.request('/me', {
      headers: {
        'Authorization': `Bearer ${token}`,
      },
    });
  }
}

// 导出单例实例
export default new AuthAPI();